package cn.infrabase;

/**
 *
 * @author Weimin Gao
 * @since 1.0.0
 **/
public abstract class RuntimeException extends java.lang.RuntimeException {

	private static final long serialVersionUID = Version.SID;

	/**
	 * 错误信息
	 */
	private final ErrorInfo error;

	/**
	 * 构造函数。
	 *
	 * @param error 错误信息。
	 */
	protected RuntimeException(Error error) {
		this(ErrorInfo.of(error));
	}

	/**
	 * 构造函数。
	 *
	 * @param cause 错误异常。
	 * @param error 错误信息。
	 */
	protected RuntimeException(Throwable cause, Error error) {
		this(cause, ErrorInfo.of(error, cause));
	}

	/**
	 * 构造函数。
	 *
	 * @param error  错误信息。
	 * @param params 错误信息详情参数。
	 */
	protected RuntimeException(Error error, Object... params) {
		this(ErrorInfo.of(error, params));
	}

	/**
	 * 构造函数。
	 *
	 * @param cause  错误异常。
	 * @param error  错误信息。
	 * @param params 错误信息详情参数。
	 */
	protected RuntimeException(Throwable cause,Error error, Object... params) {
		this(cause, ErrorInfo.of(error, params));
	}

	/**
	 * 返回错误信息。
	 *
	 * @return 错误信息。
	 */
	public ErrorInfo getError() {
		return error;
	}

	// -----------------------------------------------------------------------------------------------------------------

	private RuntimeException(ErrorInfo error) {
		super(error.toString());
		this.error = error;
	}

	private RuntimeException(Throwable cause, ErrorInfo error) {
		super(error.toString(),cause);
		this.error = error;
	}
}
